#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 18-5-21 下午1:59
# @Author  : LK
# @File    : 文件传输-服务端.py
# @Software: PyCharm

from socket import *
import struct
import json
import os

tcpClient = socket(AF_INET, SOCK_STREAM)
ipPort = (('192.168.2.230', 8080))
buffsize = 1024

tcpClient.connect_ex(ipPort)
print('trying to connect the server')
while True:
        
    '''通信循环'''
    fileMsg = "dog.jpg"

    fileSizeBytes = os.path.getsize(fileMsg) # 得到文件的大小,字节
    fileName = fileMsg
    tmpDic = {
        'filename': fileName,
        'filesize_bytes': fileSizeBytes,
    }
    headInfo = json.dumps(tmpDic)  # 将字典转换成字符串
    headInfoLen = struct.pack('i', len(headInfo)) #  将字符串的长度打包
    #   先将报头转换成字符串(json.dumps), 再将字符串的长度打包
    #   发送报头长度,发送报头内容,最后放真是内容
    #   报头内容包括文件名,文件信息,报头
    #   接收时:先接收4个字节的报头长度,
    #   将报头长度解压,得到头部信息的大小,在接收头部信息, 反序列化(json.loads)
    #   最后接收真实文件
    tcpClient.send(headInfoLen)  # 发送head_info的长度
    tcpClient.send(headInfo.encode('utf-8'))

    #   发送真是信息
    with open(fileMsg, 'rb') as f:
        data = f.read()
        tcpClient.sendall(data)

    print('发送成功')
    s=  tcpClient.recv(1024)
    print(s,s.decode('ascii'))
    break
